package com.zhijian.medical.entity.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.zhijian.medical.entity.dto.PersonDto;
import com.zhijian.medical.entity.vo.response.ExperimentProcessSampleVo;
import com.zhijian.medical.enums.ExperimentFishStatusEnum;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/**
 * 实验流程
 *
 * @author Auto Generator
 * @date 2022-04-06 22:09:16
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Api(tags = "FISH检测")
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ExperimentFish {
    /**
     * 主键id
     */
    @ApiModelProperty("主键id")
    private Long id;

    /**
     * 流程编号
     */
    @ApiModelProperty("实验编号")
    private String experimentNum;

    /**
     * 名称
     */
    @ApiModelProperty("实验名称")
    @NotBlank(message = "名称不能为空")
    private String name;

    /**
     * 开始时间
     */
    @ApiModelProperty("开始时间")
    private Date startTime;

    /**
     * 结束时间
     */
    @ApiModelProperty("结束时间")
    private Date endTime;

    /**
     * 进度状态  0:实验初始状态 1:样本处理区完成 2:杂交室完成 3:暗室完成 4:审核通过
     */
    @ApiModelProperty("进度状态 0:实验初始状态 1:样本处理区完成 2:杂交室完成 3:暗室完成 4:审核通过")
    private Byte status;

    /**
     * 操作者
     */
    @ApiModelProperty("操作者")
    @NotBlank(message = "操作者不能为空")
    private String operateUserName;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 修改时间
     */
    @ApiModelProperty("修改时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 是否删除
     */
    @ApiModelProperty("是否删除")
    private Byte deleted;

    /**
     * 样本管理ID列表
     */
    @ApiModelProperty("样本管理ID列表")
    @NotNull(message = "样本管理ID列表不能为空")
    @Size(min = 1, message = "样本管理ID列表至少为1条")
    private List<Long> sampleIds;

    /**
     * 样本
     */
    @ApiModelProperty("样本")
    private List<ExperimentProcessSampleVo> experimentProcessSampleList;

    @ApiModelProperty("当前登录用户")
    private PersonDto personDto;

    @ApiModelProperty("状态解释")
    @TableField(exist = false)
    private String statusStr;

    public void setStatus(Byte status) {
        this.status = status;
        if (Objects.isNull(this.status)) {
            this.statusStr = null;
            return;
        }

        ExperimentFishStatusEnum fishStatusEnum = ExperimentFishStatusEnum.getByCode(Integer.valueOf(this.status));
        this.statusStr = Objects.nonNull(fishStatusEnum) ? fishStatusEnum.getDesc() : null;
    }

}